package com.soulgame.sms.pay;

import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import cn.egame.terminal.paysdk.EgameExitListener;
import cn.egame.terminal.paysdk.EgamePay;
import cn.egame.terminal.paysdk.EgamePayListener;

import com.soul.sdk.SGProxy;
import com.soul.sdk.constants.ResultCode;
import com.soul.sdk.constants.UserMapKey;
import com.soul.sdk.plugin.pay.IPayCallBack;
import com.soul.sdk.plugin.pay.PayParams;
import com.soul.sdk.plugin.user.IExitListener;
import com.soul.sdk.plugin.user.UserProxy;
import com.soul.sdk.utils.SGDebug;
import com.soul.sdk.utils.json.KJSONObject;
import com.soulgame.sgsdkproject.sgtool.DeviceUtil;
import com.soulgame.sms.contant.PayType;
import com.soulgame.sms.pay.vo.VoEGamePayParams;
import com.soulgame.sms.pay.vo.VoPayParams;

/**
 * @author lch
 * @version Create time：2017-3-15
 * @类说明：电信爱动漫
 */
public class EGamePay extends SMSPay {

	private VoEGamePayParams mVoEGamePayParams;
	
	private boolean isHasExitDialog = false;
	
	@Override
	public String getPayType() {
		return PayType.EGAME;
	}
	
	@Override
	public VoPayParams getVoPayParams() {
		return mVoEGamePayParams;
	}

	@Override
	public void init(Activity pActivity, KJSONObject pSdkParamsJSON) {
		this.mVoEGamePayParams = new VoEGamePayParams(pSdkParamsJSON);
		try {
			EgamePay.init(pActivity);
		} catch (Exception e) {
			e.printStackTrace();
			SGDebug.print_e(this, "Egame init error = " + e);
		}
		// 爱游戏的短代SDK,官方包要求有退出弹框
		if (UserMapKey.CHANNEL_EGAME.equalsIgnoreCase(DeviceUtil.getChannel(pActivity))) {
			this.isHasExitDialog = true;
			// SDK 存在退出对话框，这里记录一下。
			UserProxy.getInstance().setHasExitDialog(true);
		}
	}

	@Override
	public void pay(Activity pActivity, PayParams pPayParams, IPayCallBack pPayCallBack) {

		boolean isOnlineGame = SGProxy.getInstance().isOnlineGame();
		HashMap<String, String> mParams = new HashMap<String, String>();

		String aProductId = pPayParams.getProductId();
		

		// 电信弱联网跟强联网 只是接口不一样，弱联网没有回调，网游要转为强联网游戏。
		if (isOnlineGame) {
			// 网游
			// 电信强联网支付需传整数金额
			String fPrice = mVoEGamePayParams.getPayPrice(aProductId);
			// cp计费流水号，必传参数（长度小于等于32，字母数字及下划线组成），SDK不处理，服务器回调的时候会透传给cp服务器。
			String aCustomOrderId = pPayParams.getSdkOrderId();
			//
			SGDebug.d(this, "Price=" + fPrice);
			//
			// 计费价格，必传参数（单位元），当前计费金额。//电信强联网支付需传整数金额
			mParams.put(EgamePay.PAY_PARAMS_KEY_TOOLS_PRICE, fPrice);
			// cp计费流水号，必传参数（长度小于等于32，字母数字及下划线组成），SDK不处理，服务器回调的时候会透传给cp服务器。
			mParams.put(EgamePay.PAY_PARAMS_KEY_CP_PARAMS, aCustomOrderId);
		} else {
			// 单机
			// 道具别名，必传参数，具体的值请参照open平台游戏详情页面道具列表中道具别名字段。
			String aToolsAlias = mVoEGamePayParams.getPayCode(aProductId);
			mParams.put(EgamePay.PAY_PARAMS_KEY_TOOLS_ALIAS, aToolsAlias);
			// 计费通道优先选择，可选参数（sms和other二选一，其它值无效），sms表示优先选择话费支付，other表示优先出现支付列表（如果只嵌入话费支付SDK此参数无意义）。
			mParams.put(EgamePay.PAY_PARAMS_KEY_PRIORITY, "sms");
		}

		EgamePay.pay(pActivity, mParams, this.getEgamePayListener(pPayParams, pPayCallBack));
	}

	private EgamePayListener getEgamePayListener(final PayParams pPayParams, final IPayCallBack pPayCallBack) {
		return new EgamePayListener() {

			@Override
			public void paySuccess(Map<String, String> params) {
				if (pPayCallBack != null) {
					pPayCallBack.onSuccess(ResultCode.CODE_PAY_SUCCESS, "支付成功", pPayParams);
				}
			}

			@Override
			public void payFailed(Map<String, String> params, int errorInt) {

				if (pPayCallBack != null) {
					pPayCallBack.onFail(ResultCode.CODE_PAY_FAIL, "支付失败,爱游戏错误代码：" + errorInt, pPayParams);
				}
			}

			@Override
			public void payCancel(Map<String, String> params) {
				if (pPayCallBack != null) {
					pPayCallBack.onFail(ResultCode.CODE_PAY_CANCEL, "取消支付", pPayParams);
				}

			}
		};

	}

	@Override
	public void exit(final Activity pActivity, final Map<String, String> customParams, final IExitListener pExitListener) {

		if (isHasExitDialog) {
			SGDebug.d(this, "爱游戏有UI退出");
			// 用户退出游戏的时候调用，弹出退出确认对话框
			EgamePay.exit(pActivity, new EgameExitListener() {
				public void exit() {
					// 用户点击退出游戏，游戏需要处理退出逻辑
					// 回调退出点击事件
					if (pExitListener != null) {

						Map<String, String> mExitMap = null;
						if (customParams != null) {
							mExitMap = customParams;
						} else {
							mExitMap = new HashMap<String, String>();
						}
						// 标记已有退出框
						mExitMap.put(UserMapKey.IS_CONTAIN_EXIT_DIALOG, "true");

						pExitListener.onExit(mExitMap);
					}
				}

				public void cancel() {
					// 用户取消退出游戏，这里不用处理
				}
			});

		} else {
			if (pExitListener != null) {
				pExitListener.onExit(customParams);
			}
		}
	}

	@Override
	public void moreGame(Activity pActivity) {
		EgamePay.moreGame(pActivity);
	}

}
